package com.luoshizhen.lease.web.admin.controller.apartment;


import com.luoshizhen.lease.common.result.Result;
import com.luoshizhen.lease.model.entity.LeaseTerm;
import com.luoshizhen.lease.web.admin.service.LeaseTermService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Tag(name = "租期管理")
@RequestMapping("/admin/term")
@RestController
public class LeaseTermController {

    @Autowired
    private LeaseTermService service;

    /**
     * 查询全部租期列表
     *
     * 该方法通过GET请求处理获取所有租期信息的请求它从数据库中检索所有租期记录，
     * 并将它们作为列表返回给客户端使用@Operation注解来描述该方法的功能，
     * 使得API文档生成工具能够生成更丰富、更具描述性的API文档
     *
     * @return 包含所有租期信息的列表
     */
    @GetMapping("list")
    @Operation(summary = "查询全部租期列表")
    public Result<List<LeaseTerm>> listLeaseTerm() {
        List<LeaseTerm> list = service.list();
        return Result.ok(list);
    }

    @PostMapping("saveOrUpdate")
    @Operation(summary = "保存或更新租期信息")
    /**
     * 保存或更新租期信息
     *
     * 该方法用于处理租期信息的保存或更新请求它根据传入的LeaseTerm对象中的数据，
     * 调用service层的saveOrUpdate方法来更新或保存租期信息这是一个POST请求处理方法，
     * 适用于需要修改服务器端资源的场景
     *
     * @param leaseTerm 租期信息对象，包含需要保存或更新的租期相关信息
     *                  它是JSON格式的数据，通过请求体传递给服务器
     * @return 返回Result对象，表示操作结果通常包含操作是否成功的信息
     *         在这个方法中，如果操作成功，返回Result.ok()，表示操作成功
     */
    public Result saveOrUpdate(@RequestBody LeaseTerm leaseTerm) {
        service.saveOrUpdate(leaseTerm);
        return Result.ok();
    }

    /**
     * 根据ID删除租期信息
     *
     * @param id 租期的唯一标识符
     * @return 删除操作的结果，使用Result包装以提供更多的上下文信息
     */
    @DeleteMapping("deleteById")
    @Operation(summary = "根据ID删除租期")
    public Result deleteLeaseTermById(@RequestParam Long id) {
        service.removeById(id);
        return Result.ok();
    }
}
